package servlet;
import util.ParameterUtil;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Arrays;

/**
 * @author 黄衡熙
 * @version 1.0
 */
//从添加处跳转过来进入数据库存储
@WebServlet("/addEmp")
public class AddEmpServlet extends HttpServlet {
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
//        指定请求字符集
        req.setCharacterEncoding("utf-8");
        PrintWriter out = resp.getWriter();
        /*out.println("<h1>即将执行添加员工功能</h>");*/
//        获取表单数据
//        在请求对象HttpServletRequest中，提供了获取表单数据的方法
//        一般有两种方法
//        1、String value getParameter(String key):根据表单的key获取对应的value，返回值是字符串类型
//        2、String[] arr=getParameterValues(String key):根据表单数据的key获取对应的value，返回值是字符串数组
        String name = req.getParameter("name");
        String salary=req.getParameter("salary");
        String gender=req.getParameter("gender");
        String edu=req.getParameter("edu");
        String[] hobbies=req.getParameterValues("hobbies");
        System.out.println("name:"+name+"salary:"+salary+"gender:"+gender+"edu:"+edu+"hobbies:"+ Arrays.toString(hobbies));
        Connection conn=null;
        PreparedStatement ps=null;
        try {
            // 1、注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2、获取连接
            conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/web?useUnicode=true&characterEncoding=utf-8","root","qq670892");
            //执行SQL预编译
            String sql="insert into t_emp(name,salary,gender,edu,hobbies) values(?,?,?,?,?)";
            ps=conn.prepareStatement(sql);
            ps.setString(1,name);
            ps.setDouble(2, Double.parseDouble(salary));
            ps.setString(3,gender);
            ps.setString(4,edu);
            ps.setString(5,ParameterUtil.arrayToString(hobbies));
            ps.executeUpdate();
//            正常来说此处是数据库添加成功后的响应
//            out.println("<h1 style='color:green;'>恭喜您,添加成功</h1>");
//            此时添加成功后，我们想跳转到查询页面，有两种方法，重定向和转发

//            重定向，客户端需要发送至少两个请求,适用于增删改，地址变为findAll
//            运行
//            resp.sendRedirect("findAll");
           // resp.sendRedirect("https://www.baidu.com/");
//            resp.sendRedirect("WEB-INF/test.jsp");
//            转发，一次请求，适用于查询操作，地址不会变
            req.getRequestDispatcher("findAll").forward(req,resp);
           // req.getRequestDispatcher("https://www.baidu.com/").forward(req,resp);
           // req.getRequestDispatcher("/WEB-INF/test.jsp").forward(req,resp);



        } catch (ClassNotFoundException e) {
            out.println("<h1 style='color:red;'>注册驱动失败，失败原因:"+e.getMessage()+"</h1>");
        } catch (SQLException e) {
            out.println("<h1 style='color:red;'>添加失败，失败原因:"+e.getMessage()+"</h1>");
        }finally {
            {
                if(conn !=null){
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        out.println("<h1 style='color:red;'>释放连接失败，失败原因:"+e.getMessage()+"</h1>");
                    }
                }
                if(ps !=null){
                    try {
                        ps.close();
                    } catch (SQLException e) {
                        out.println("<h1 style='color:red;'>释放资源，失败原因:"+e.getMessage()+"</h1>");
                    }
                }
            }
        }
    }
}
